FEXP Solver  1.0.0.0
FEXPDataContainer.h
Go to the documentation of this file.
1 // © FEXP, FEXPEnterprise Solver, Ing. Vaclav Rek
3 // Data management model
4 // Compiler must support C++ ver.14 and later
6 #ifndef _CFEXPDATACONTAINER_H_
7 #define _CFEXPDATACONTAINER_H_
8 #include "FEXPCommon.h"
9 #include "FEXPSerialization.h"
10 #include "FEXPGeom.h"
11 
12 // typedef for FE model data
13 using t_ModelDataKey = std::string;
14 using t_ModelDataDta = std::vector<std::string>;
15 using t_ModelData = std::map<t_ModelDataKey, Ptr<t_ModelDataDta>>;
16 
23 
29  : public ICFEXPSerialize
30 {
31 public:
32  virtual size_t GetId () = 0;
33  virtual size_t GetModelId () = 0;
34  virtual size_t GetType () = 0;
35  virtual size_t GetThreadId () = 0;
36  virtual size_t GetThreadNumber() = 0;
37  virtual void SetThreadId (size_t id) = 0;
38 protected:
39  // [no protected members] -----------------------------
40 private:
41  // [no private members ] -----------------------------
42 };
43 
50 
53  : public ICFEXPDataWrapperBase<ICFEXPModelDataIntf, size_t>
54 {
55 public:
58  virtual ~CFEXPModelDataWrapper() { }
59 
60  // override interface forces virtual functions
61  virtual size_t GetKey() override { return GetData()->GetId(); }
62 protected:
63  // [no protected members] -----------------------------
64 private:
65  // [no private members ] -----------------------------
66 };
67 
74 
77 {
78 public:
80  // pure virtual member functions for adding and getting elements
81  virtual void AddModelElement(Ptr<ICFEXPModelDataIntf> & el, size_t opt_id) = 0;
82  virtual Ptr<ICFEXPModelDataIntf> GetModelElement(size_t id, size_t opt_id) = 0;
83  virtual Ptr<ICFEXPModelDataIntf> GetModelElement(size_t id, size_t opt_id, size_t thread_id) = 0;
84  using t_IterFunc = std::function<bool(Ptr<ICFEXPModelDataIntf>)>;
85  virtual void IterateModElems(t_IterFunc function, size_t opt_id) = 0;
86  virtual void IterateModElems(t_IterFunc function, size_t opt_id, size_t thread_id) = 0;
87  // key checker
88  virtual bool ContainsKey(size_t id, size_t opt_id) = 0;
89  virtual bool RemoveItem (size_t id, size_t opt_id) = 0;
90  virtual bool RemoveItem (const std::map<size_t, std::vector<size_t>> & ids) = 0;
91  virtual bool RemoveAll (size_t opt_id) = 0;
92 
93  // thread scheduling
94  virtual void ScheduleThreads(size_t opt_id) = 0;
95  // check if container is empty
96  virtual size_t ItemCount(size_t opt_id) = 0;
97  virtual bool IsEmpty (size_t opt_id) = 0;
98 protected:
99  // [no protected members] -----------------------------
100 private:
101  // [no private members ] -----------------------------
102 };
103 
110 
113  : public ICFEXPDataModelContIntf, public ICFEXPDataContainerBase<CFEXPModelDataWrapper, ICFEXPModelDataIntf, size_t>
114 {
115 public:
118  // override interface virtual functions of fe cont. base
119  virtual void AddModelElement(Ptr<ICFEXPModelDataIntf> & el, size_t opt_id) override;
120  virtual Ptr<ICFEXPModelDataIntf> GetModelElement(size_t id, size_t opt_id) override;
121  virtual Ptr<ICFEXPModelDataIntf> GetModelElement(size_t id, size_t opt_id, size_t thread_id) override;
122  virtual void IterateModElems(t_IterFunc function, size_t opt_id) override;
123  virtual void IterateModElems(t_IterFunc function, size_t opt_id, size_t thread_id) override;
124 
125  virtual bool ContainsKey (size_t id, size_t opt_id) override { return Contains(id); }
126  virtual bool RemoveItem (size_t id, size_t opt_id) override;
127  virtual bool RemoveItem (const std::map<size_t, std::vector<size_t>> & ids) override;
128  virtual bool RemoveAll (size_t opt_id) override;
129  virtual void ScheduleThreads(size_t opt_id) override;
130  virtual size_t ItemCount (size_t opt_id) override;
131  virtual bool IsEmpty (size_t opt_id) override;
132 protected:
133  std::map<size_t, std::map<size_t, size_t>> _thread_mapper;
134  void add_new_thread_item(size_t thread, size_t id);
135 private:
136  // [no private members ] -----------------------------
137 };
138 
145 #define SETTING_CONTAINER_NAME "SETTING_CONTAINER"
146 
149  : public CFEXPModelContainerBase
150 {
151 public:
154 
155  // override interface virtual functions of container bases
156  virtual std::string GetContainerName() const override { return SETTING_CONTAINER_NAME; }
157 protected:
158  // [no protected members] -----------------------------
159 private:
160  // [no private members ] -----------------------------
161 };
162 
163 // container class name simplification
165 
172 #define MATERIAL_CONTAINER_NAME "MATERIAL_CONTAINER"
173 
176  : public CFEXPModelContainerBase
177 {
178 public:
181 
182  // override interface virtual functions of container bases
183  virtual std::string GetContainerName() const override { return MATERIAL_CONTAINER_NAME; }
184 protected:
185  // [no protected members] -----------------------------
186 private:
187  // [no private members ] -----------------------------
188 };
189 
190 // container class name simplification
192 
199 #define FINITE_ELEMENT_CONTAINER_NAME "FE_CONTAINER"
200 
203  : public CFEXPModelContainerBase
204 {
205 public:
208 
209  // override interface virtual functions of container bases
210  virtual std::string GetContainerName() const override { return FINITE_ELEMENT_CONTAINER_NAME; }
211 protected:
212  // [no protected members] -----------------------------
213 private:
214  // [no private members ] -----------------------------
215 };
216 
217 // container class name simplification
219 
226 #define FINITE_ELEMENT_NODE_CONTAINER_NAME "FE_NODE_CONTAINER"
227 
230  : public CFEXPModelContainerBase
231 {
232 public:
235 
236  // override interface virtual functions of container bases
237  virtual std::string GetContainerName() const override { return FINITE_ELEMENT_NODE_CONTAINER_NAME; }
238 protected:
239  // [no protected members] -----------------------------
240 private:
241  std::map<size_t, std::vector<size_t>> _thread_mapper;
242 };
243 
244 // container class name simplification
246 
253 #define FINITE_ELEMENT_NODE_CONSTRAIN_CONTAINER_NAME "FE_NODE_CONSTRAIN_CONTAINER"
254 
257  : public CFEXPModelContainerBase
258 {
259 public:
262 
263  // override interface virtual functions of container bases
264  virtual std::string GetContainerName() const override { return FINITE_ELEMENT_NODE_CONSTRAIN_CONTAINER_NAME; }
265 protected:
266  // [no protected members] -----------------------------
267 private:
268  // [no private members ] -----------------------------
269 };
270 
271 // container class name simplification
273 
280 #define FINITE_ELEMENT_NODE_LOAD_CONTAINER_NAME "FE_NODE_LOAD_CONTAINER"
281 
284  : public CFEXPModelContainerBase
285 {
286 public:
289 
290  // override interface virtual functions of container bases
291  virtual std::string GetContainerName() const override { return FINITE_ELEMENT_NODE_LOAD_CONTAINER_NAME; }
292 protected:
293  // [no protected members] -----------------------------
294 private:
295  // [no private members ] -----------------------------
296 };
297 
298 // container class name simplification
300 
307 #define FINITE_ELEMENT_RESULT_CONTAINER_NAME "FE_RESULT_CONTAINER"
308 
311  : public CFEXPModelContainerBase
312 {
313 public:
316 
317  // override interface virtual functions of container bases
318  virtual std::string GetContainerName() const override { return FINITE_ELEMENT_RESULT_CONTAINER_NAME; }
319 protected:
320  // [no protected members] -----------------------------
321 private:
322  // [no private members ] -----------------------------
323 };
324 
325 // container class name simplification
327 
334 
337  : public ICFEXPDataModelContIntf
338 {
339 public:
342 
343  // override interface virtual functions of container bases
344  virtual void AddModelElement(Ptr<ICFEXPModelDataIntf> & el, size_t opt_id) override;
345  virtual Ptr<ICFEXPModelDataIntf> GetModelElement(size_t id, size_t opt_id) override;
346  virtual Ptr<ICFEXPModelDataIntf> GetModelElement(size_t id, size_t opt_id, size_t thread_id) override;
347  virtual void IterateModElems(t_IterFunc function, size_t opt_id) override;
348  virtual void IterateModElems(t_IterFunc function, size_t opt_id, size_t thread_id) override;
349 
350  virtual bool ContainsKey (size_t id, size_t opt_id) override;
351  virtual bool RemoveItem (size_t id, size_t opt_id) override;
352  virtual bool RemoveItem (const std::map<size_t, std::vector<size_t>> & ids) override;
353  virtual bool RemoveAll (size_t opt_id) override;
354  virtual void ScheduleThreads(size_t opt_id) override;
355  virtual size_t ItemCount (size_t opt_id) override;
356  virtual bool IsEmpty (size_t opt_id) override;
357 protected:
359 private:
360  std::map<ESystemElementType, Ptr<ICFEXPDataModelContIntf>> _model_container;
361 };
362 
363 #endif // !_CFEXPDATACONTAINER_H_
virtual bool IsEmpty(size_t opt_id) override
Definition: FEXPDataContainer.cpp:365
CFEXPFiniteElementNodeContainer()
Definition: FEXPDataContainer.cpp:204
virtual bool ContainsKey(size_t id, size_t opt_id)=0
virtual size_t GetId()=0
#define FINITE_ELEMENT_NODE_CONSTRAIN_CONTAINER_NAME
Definition: FEXPDataContainer.h:253
virtual Ptr< ICFEXPModelDataIntf > GetModelElement(size_t id, size_t opt_id) override
Definition: FEXPDataContainer.cpp:288
std::function< bool(Ptr< ICFEXPModelDataIntf >)> t_IterFunc
Definition: FEXPDataContainer.h:84
virtual ~CFEXPFiniteElementNodeContainer()
Definition: FEXPDataContainer.h:234
virtual bool RemoveItem(size_t id, size_t opt_id) override
Definition: FEXPDataContainer.cpp:123
Container for FEs.
Definition: FEXPDataContainer.h:202
Definition: FEXPDataContainer.h:25
virtual size_t GetKey() override
Definition: FEXPDataContainer.h:61
virtual ~CFEXPFiniteElementNodeConstrainContainer()
Definition: FEXPDataContainer.h:261
CFEXPFiniteElementNodeLoadContainer()
Definition: FEXPDataContainer.cpp:224
CFEXPModelContainerBase()
Definition: FEXPDataContainer.cpp:25
virtual size_t ItemCount(size_t opt_id) override
Definition: FEXPDataContainer.cpp:109
CFEXPFiniteElementContainer()
Definition: FEXPDataContainer.cpp:194
virtual std::string GetContainerName() const override
Definition: FEXPDataContainer.h:156
Container for FE nodes.
Definition: FEXPDataContainer.h:229
#define FINITE_ELEMENT_NODE_LOAD_CONTAINER_NAME
Definition: FEXPDataContainer.h:280
virtual ~CFEXPModelDataWrapper()
Definition: FEXPDataContainer.h:58
virtual bool RemoveItem(size_t id, size_t opt_id) override
Definition: FEXPDataContainer.cpp:323
Container for results of a numerical simulation.
Definition: FEXPDataContainer.h:310
virtual void IterateModElems(t_IterFunc function, size_t opt_id) override
Definition: FEXPDataContainer.cpp:75
virtual ~CFEXPModelContainerBase()
Definition: FEXPDataContainer.h:117
Definition: FEXPDataContainer.h:25
Definition: FEXPDataContainer.h:25
Definition: FEXPCommon.h:276
virtual std::string GetContainerName() const override
Definition: FEXPDataContainer.h:237
virtual size_t GetThreadId()=0
virtual bool RemoveAll(size_t opt_id) override
Definition: FEXPDataContainer.cpp:344
#define FINITE_ELEMENT_RESULT_CONTAINER_NAME
Definition: FEXPDataContainer.h:307
Container data wrapper.
Definition: FEXPDataContainer.h:52
Definition: FEXPDataContainer.h:25
Container for settings.
Definition: FEXPDataContainer.h:148
Base interface for data serialization.
Definition: FEXPSerialization.h:20
virtual Ptr< ICFEXPModelDataIntf > GetModelElement(size_t id, size_t opt_id)=0
CFEXPFiniteElementResultContainer()
Definition: FEXPDataContainer.cpp:234
virtual bool ContainsKey(size_t id, size_t opt_id) override
Definition: FEXPDataContainer.h:125
virtual void ScheduleThreads(size_t opt_id)=0
virtual size_t GetModelId()=0
#define MATERIAL_CONTAINER_NAME
Definition: FEXPDataContainer.h:172
ESystemElementType
The type of system element.
Definition: FEXPDataContainer.h:25
Container for load of FE nodes.
Definition: FEXPDataContainer.h:283
Definition: FEXPDataContainer.h:25
std::map< size_t, std::map< size_t, size_t > > _thread_mapper
Definition: FEXPDataContainer.h:133
virtual void ScheduleThreads(size_t opt_id) override
Definition: FEXPDataContainer.cpp:86
virtual bool RemoveAll(size_t opt_id) override
Definition: FEXPDataContainer.cpp:149
virtual size_t ItemCount(size_t opt_id) override
Definition: FEXPDataContainer.cpp:358
virtual std::string GetContainerName() const override
Definition: FEXPDataContainer.h:264
virtual void ScheduleThreads(size_t opt_id) override
Definition: FEXPDataContainer.cpp:351
std::map< t_ModelDataKey, Ptr< t_ModelDataDta > > t_ModelData
Definition: FEXPDataContainer.h:15
virtual ~CFEXPFiniteElementResultContainer()
Definition: FEXPDataContainer.h:315
Definition: FEXPDataContainer.h:25
virtual std::string GetContainerName() const override
Definition: FEXPDataContainer.h:210
virtual bool IsEmpty(size_t opt_id)=0
virtual bool IsEmpty(size_t opt_id) override
Definition: FEXPDataContainer.cpp:116
virtual Ptr< ICFEXPModelDataIntf > GetModelElement(size_t id, size_t opt_id) override
Definition: FEXPDataContainer.cpp:37
virtual bool RemoveItem(size_t id, size_t opt_id)=0
virtual size_t GetType()=0
virtual ~CFEXPMaterialContainer()
Definition: FEXPDataContainer.h:180
virtual std::string GetContainerName() const override
Definition: FEXPDataContainer.h:183
virtual ~ICFEXPDataModelContIntf()
Definition: FEXPDataContainer.h:79
virtual void AddModelElement(Ptr< ICFEXPModelDataIntf > &el, size_t opt_id)=0
CFEXPMainDataContainer()
Definition: FEXPDataContainer.cpp:245
Container for solid materials.
Definition: FEXPDataContainer.h:175
void add_new_thread_item(size_t thread, size_t id)
Definition: FEXPDataContainer.cpp:157
Definition: FEXPDataContainer.h:25
virtual size_t ItemCount(size_t opt_id)=0
virtual void SetThreadId(size_t id)=0
Base container class.
Definition: FEXPDataContainer.h:112
Definition: FEXPDataContainer.h:25
virtual bool ContainsKey(size_t id, size_t opt_id) override
Definition: FEXPDataContainer.cpp:316
#define FINITE_ELEMENT_CONTAINER_NAME
Definition: FEXPDataContainer.h:199
virtual bool RemoveAll(size_t opt_id)=0
virtual void AddModelElement(Ptr< ICFEXPModelDataIntf > &el, size_t opt_id) override
Definition: FEXPDataContainer.cpp:30
virtual ~CFEXPFiniteElementContainer()
Definition: FEXPDataContainer.h:207
CFEXPModelDataWrapper(Ptr< ICFEXPModelDataIntf > &element)
Definition: FEXPDataContainer.cpp:10
CFEXPSettingContainer()
Definition: FEXPDataContainer.cpp:174
virtual std::string GetContainerName() const override
Definition: FEXPDataContainer.h:318
virtual ~CFEXPSettingContainer()
Definition: FEXPDataContainer.h:153
Base interface for system element.
Definition: FEXPDataContainer.h:28
Main system container.
Definition: FEXPDataContainer.h:336
Ptr< ICFEXPDataModelContIntf > get_container(size_t opt_id)
Definition: FEXPDataContainer.cpp:372
Ptr< ICFEXPModelDataIntf > GetData()
Definition: FEXPCommon.h:441
virtual void IterateModElems(t_IterFunc function, size_t opt_id) override
Definition: FEXPDataContainer.cpp:302
Base wrapper for items in container.
Definition: FEXPCommon.h:434
virtual void IterateModElems(t_IterFunc function, size_t opt_id)=0
virtual size_t GetThreadNumber()=0
#define SETTING_CONTAINER_NAME
Definition: FEXPDataContainer.h:145
#define FINITE_ELEMENT_NODE_CONTAINER_NAME
Definition: FEXPDataContainer.h:226
Container for constrains of FE nodes..
Definition: FEXPDataContainer.h:256
std::string t_ModelDataKey
Definition: FEXPDataContainer.h:13
CFEXPMaterialContainer()
Definition: FEXPDataContainer.cpp:184
Definition: FEXPCommon.h:475
Base interface for system container.
Definition: FEXPDataContainer.h:76
virtual ~CFEXPFiniteElementNodeLoadContainer()
Definition: FEXPDataContainer.h:288
CFEXPFiniteElementNodeConstrainContainer()
Definition: FEXPDataContainer.cpp:214
virtual std::string GetContainerName() const override
Definition: FEXPDataContainer.h:291
virtual ~CFEXPMainDataContainer()
Definition: FEXPDataContainer.h:341
std::vector< std::string > t_ModelDataDta
Definition: FEXPDataContainer.h:14
virtual void AddModelElement(Ptr< ICFEXPModelDataIntf > &el, size_t opt_id) override
Definition: FEXPDataContainer.cpp:279